「每一次複製貼上的動作,就像頭痛時吃顆止痛錠那樣快又有效。但每一顆都在侵蝕著你的健康。」
#quote #出來跑總有一天要還的 #腳踏實地才是捷徑
複製 & 貼上是一種設計錯誤。(David Parnas)
Copy and paste is a design error. (David Parnas)
--
「在你透過複製貼上的動作來快速交件時,可能會覺得其他在重構的人都是傻子。但是相信我,那一天到了,你就會發現只有你走不過去。」
不過,雖然複製貼上是種罪惡,但實務上還是會為了一些特殊緣由而取捨,這時建議搭配三次法則(The Rule of Three),也就是同樣的東西只有重複一次沒關係。只有兩份重複的東西,就算要改,最多也只是再一次複製貼上而已。
但萬一超過三個 block 程式碼相同時,就不可以視而不見了,應重構以避免一式多份。
怎麼找出來程式碼相似的部分?Simian(http://www.harukizaemon.com/simian/) 是個不錯的工具,支援的語言有 Java, C#, C, C++, COBOL, Ruby, JSP, ASP, HTML, XML, Visual Basic, Groovy. (附圖是 CI report 上靜態程式碼分析的趨勢圖與 result 的範例,可以看到相關的 violation rule 原因跟程式碼行數都在 CI report 上一覽無遺)
Visual Studio 2012/2013/2015 的版本,Premium/Ultimate 版本,也有內建的 Code Clone Detection 功能,可以掃出來程式碼有哪些是相似的。